package com.liveinstars.im.core.service;

import com.liveinstars.im.common.dto.ChatGroupDTO;
import com.liveinstars.im.common.enums.SpecialUserEnum;
import com.liveinstars.im.domain.dao.model.ChatGroup;
import com.liveinstars.api.im.query.ChatGroupQuery;
import com.liveinstars.api.im.vo.ChatGroupDetailVO;
import com.liveinstars.api.im.vo.ChatGroupRecordVO;
import com.liveinstars.api.im.vo.ChatMsgVO;
import com.onepiece.shipelves.common.vo.Page;

import java.util.List;

/**
 * @author: zhouze
 * @date: 2020/3/3
 */
public interface ChatGroupService {

    /**
     * 圈子管理列表分页查询接口
     * @param query
     * @return
     */
    Page<ChatGroupRecordVO> pageBackendRecordByQuery(ChatGroupQuery query);

    /**
     * 获取分页圈子列表
     * @param query
     * @return
     */
    Page<ChatGroupRecordVO> pageByQuery(ChatGroupQuery query);

    /**
     * 获取圈子详情
     * @param id
     * @return
     */
    ChatGroupDetailVO getDetailById(Long id);

    /**
     * 获取圈子信息带管理员用户信息
     * @param id
     * @return
     */
    ChatGroupDetailVO getDetailWithManagerById(Long id);

    /**
     * 根据id更新数据群组信息
     * @param vo
     */
    void updateById(ChatGroupDetailVO vo);

    /**
     * 根据id更新hot值
     * @param id
     * @param hot
     */
    void updateHotById(Long id, Integer hot);

    /**
     * 根据圈子id分页查询群组消息列表
     * @param id
     * @param pageSize
     * @param pageNum
     * @return
     */
    Page<ChatMsgVO> pageChatMsgByChatGroupId(Long id, Integer pageSize, Integer pageNum);

    /**
     * 根据群id和消息id删除消息
     * @param chatGroupId
     * @param msgId
     * @return
     */
    void deleteByChatGroupIdAndMsgId(Long chatGroupId, Long msgId);

    /**
     * 根据消息id删除用户未读消息
     * @param userId
     * @param msgId
     */
    void removeUnreadMessage(Long userId, Long msgId);

    /**
     * 后台根据groupId解散圈子
     * @param groupId
     */
    void disbandChatGroupByBackend(Long groupId);

    /**
     * 获取好友聊天圈子
     * @param userIdA
     * @param userIdB
     * @return
     */
    ChatGroup getFriendsChatGroup(Long userIdA, Long userIdB);

    /**
     * 获取用户创建的圈子列表
     * @param userId
     * @return
     */
    List<ChatGroupRecordVO> listChatGroupByCreateUserId(Long userId);

    /**
     * 创建chatGroup和GroupMember
     * @param chatGroupDTO
     */
    void createChatGroupWithMember(ChatGroupDTO chatGroupDTO);

    /**
     * 添加特殊角色聊天圈子
     * @param userId
     * @param specialUserEnum
     */
    void addSpecialChatGroup(Long userId, SpecialUserEnum specialUserEnum);

    /**
     * 修改群成员备注名称
     * @param selfId
     * @param chatGroupId
     * @param remarkName
     */
    void updateMemberRemarkName(Long selfId, Long chatGroupId, String remarkName);

    List<ChatGroupRecordVO> listChatGroupByCreateUserIdAndInterestId(Long userId, Integer interestId);

    ChatGroupRecordVO getChatGroupByCreateUserIdAndInterestId(Long userId, Integer interestId);
}
